En Ruby, l'entrée/sortie n'est pas seulement un ensemble d'instructions ; c'est une architecture basée sur les flux. Au cœur de ce système se trouve la classe IO qui sert de canal bidirectionnel entre votre programme et le monde extérieur. Que vous interagissiez avec un fichier, une socket réseau ou le terminal de l'utilisateur, Ruby les traite comme des flux génériques.
1. Le pont bidirectionnel
Un objet IO est une abstraction unifiée. Alors que le système d'exploitation voit des descripteurs de fichiers distincts descripteurs de fichiers pour la lecture et l'écriture (comme dans un tube), Ruby les encapsule dans un seul objet. Cela permet un flux de données fluide dans les deux sens.
2. Kernel et filtres standards
Le module Kernel fournit des méthodes comme gets et print. Ce sont essentiellement des filtres qui déléguent aux constantes globales STDIN et STDOUT. Cela signifie que votre code peut être redirigé au niveau du système d'exploitation pour traiter des fichiers ou des flux réseau sans modifier une seule ligne de logique.
$$\text{Flux} \rightarrow \text{Tampon} \rightarrow \text{Interpréteur Ruby}$$